const permute = (nums) => {
    // 用于存储所有全排列的结果
    const res = [];
    // 记录某个数字是否已经被使用过
    const used = {};

    function dfs(path){
        if(path.length === nums.length) {
            // 将当前路径的副本加入结果集
            res.push(path.slice());
            return;
        }

        // 遍历每一个数字，尝试加入当前路径中
        for(let num of nums) {
            if(used[num]) continue;

            path.push(num);
            used[num] = true;

            dfs(path);

            path.pop(num);
            used[num] = false;
        }
    }

    dfs([]);
    return res;
}

let nums = [1,2,3];
console.log(permute(nums));
